home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / src / dobj / data.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-09  |  1.6 KB  |  70 lines

  1. /*
  2.  *    (c)Copyright 1992-1997 Obvious Implementations Corp.  Redistribution and
  3.  *    use is allowed under the terms of the DICE-LICENSE FILE,
  4.  *    DICE-LICENSE.TXT.
  5.  */
  6.  
  7. /*
  8.  *  DATA.C
  9.  */
  10.  
  11. #include "defs.h"
  12.  
  13. Prototype void DumpData(FILE *fi, short srcHunk, long begOffset, long endOffset);
  14. Prototype void DumpHex(FILE *fi, short srcHunk, long begOffset, long endOffset);
  15.  
  16. void
  17. DumpData(FILE *fi, short srcHunk, long begOffset, long endOffset)
  18. {
  19.     RelocInfo *r;
  20.     long data;
  21.  
  22.     for (r = FindRelocOffset(begOffset, srcHunk); r && r->ri_SrcOffset < endOffset; r = FindRelocNext(r)) {
  23.     DumpHex(fi, srcHunk, begOffset, r->ri_SrcOffset);
  24.  
  25.     if (r->ri_SrcOffset < begOffset)
  26.         cerror(EFATAL, "Software Error, Reloc-Offset");
  27.  
  28.     data = LoadRelocData(fi, r);
  29.     printf(" %02x.%08lx  %s\n", srcHunk, (long)(r->ri_SrcOffset + StartDo), RelocToStr(r, data, 1, 0, -1));
  30.     begOffset = r->ri_SrcOffset + r->ri_RelocSize;
  31.     }
  32.     if (begOffset != endOffset)
  33.     DumpHex(fi, srcHunk, begOffset, endOffset);
  34. }
  35.  
  36. void
  37. DumpHex(FILE *fi, short srcHunk, long begOffset, long endOffset)
  38. {
  39.     long index = 0;
  40.  
  41.     if (begOffset == endOffset)
  42.     return;
  43.  
  44.     while (begOffset < endOffset) {
  45.     if ((index & 15) == 0)
  46.         printf(" %02x.%08lx ", srcHunk, (long)(begOffset + StartDo));
  47.  
  48.     if (begOffset + 1 == endOffset) {
  49.         ubyte c = -1;
  50.  
  51.         fread(&c, 1, 1, fi);
  52.         printf(" %02x", c);
  53.         ++begOffset;
  54.         ++index;
  55.     } else {
  56.         uword c = -1;
  57.  
  58.         freadl(&c, 2, 1, fi);
  59.         printf(" %04x", c);
  60.         begOffset += 2;
  61.         index += 2;
  62.     }
  63.     if ((index & 15) == 0)
  64.         puts("");
  65.     }
  66.     if (index & 15)
  67.     puts("");
  68. }
  69.  
  70.